import VueRouter from 'vue-router'

// 对路由提供的 push 和 reqlace 方法进行增强
// const originPush = VueRouter.$router.push

// // 开始对 push 进行增强
// // 第一个 path 是跳转的而路由,第二个参数 是成功回调,第三个参数 是失败回调
// VueRouter.prototype.push = function (path, successCb, errorCb) {
//   // 当传递了 第二个参数或者第三个参数,即为 true,会走if 下的判断
//   // 如果没传 第二个参数,就以 第三个参数为准,当第三个参数传递了,也走if下的判断
//   // 如果都传递了, 肯定会走if下的判断
//   if (successCb || errorCb) {
//     originPush.call(this, path, successCb, errorCb)
//   } else {
//     // 当第二个参数和第三个参数都没传递,就走 else 下的逻辑
//     // 直接使用 catch 方法去捕获异常
//     originPush.call(this, path).catch(() => {})
//   }
// }

// 对路由提供的 push 和 reqlace 方法进行增强 ---(批量增强)
const originArray = ['push', 'reqlace']

originArray.forEach((item) => {
  // 对 每一项 来进行缓存
  const originItem = VueRouter.prototype[item]

  VueRouter.prototype[item] = function (path, successCb, errorCb) {
    // 当传递了 第二个参数或者第三个参数,即为 true,会走if 下的判断
    // 如果没传 第二个参数,就以 第三个参数为准,当第三个参数传递了,也走if下的判断
    // 如果都传递了, 肯定会走if下的判断
    if (successCb || errorCb) {
      originItem.call(this, path, successCb, errorCb)
    } else {
      // 当第二个参数和第三个参数都没传递,就走 else 下的逻辑
      // 直接使用 catch 方法去捕获异常
      originItem.call(this, path).catch(() => {})
    }
  }
})
